/*
 * Description.java
 *
 * Created on 16 de Junho de 2011, 17:56
 */

package intopo.game;

/**
 * This interface provides methods that return all the data needed to use a
 * specific game or that should be called before using a game.  It ranges from an instance that implements the rules of
 * the game, instances that represent strategies for playing the game, and
 * a fold object capable of summarising a collection of strategies.  There is a method that reads global parameters from a scanner.
 *
 * @param G The game players are going to play.
 * @param S The strategy used by players.
 *
 * @author <a href="mailto:mariano.pedro@gmail.com">Pedro Mariano</a>
 *
 * @version 1.1 16 de Junho de 2011
 */
public interface Description<G extends Game<S>, S extends Strategy<S>>
{
	/**
	 * Return a fold object that can be used to summarise a collection of
	 * strategies.
	 */
	FoldStrategy<S> getFoldStrategy ();
	/**
	 * Get a description of a strategy that represents the given bin.  This description is merely illustrative.  A bin can represent a set of strategies.
	 * If the strategies are stochast, then a bin represents a given range of mixed strategies.
	 * @param c The class type of the strategy description to be returned
	 * @param bin The bin of the strategy.
	 * @return A string containing a descriptive strategy of the given bin.
	 */
	String getBinDescription (java.lang.Class<? extends S> c, int bin);
}
